/**
 * 时间格式化工具函数
 */

/**
 * 格式化时间为中文格式
 * @param timeStr 时间字符串
 * @returns 格式化后的时间字符串，如果为空返回 '-'
 */
export const formatTime = (timeStr: string | null | undefined): string => {
    if (!timeStr) return '-';
    try {
        const date = new Date(timeStr);
        return date.toLocaleString('zh-CN', {
            year: 'numeric',
            month: '2-digit',
            day: '2-digit',
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit'
        });
    } catch (error) {
        return timeStr;
    }
};

/**
 * 格式化日期（不包含时间）
 * @param dateStr 日期字符串
 * @returns 格式化后的日期字符串，如果为空返回 '-'
 */
export const formatDate = (dateStr: string | null | undefined): string => {
    if (!dateStr) return '-';
    try {
        const date = new Date(dateStr);
        return date.toLocaleDateString('zh-CN', {
            year: 'numeric',
            month: '2-digit',
            day: '2-digit'
        });
    } catch (error) {
        return dateStr;
    }
};

/**
 * 格式化时间（仅显示时分秒）
 * @param timeStr 时间字符串
 * @returns 格式化后的时间字符串，如果为空返回 '-'
 */
export const formatTimeOnly = (timeStr: string | null | undefined): string => {
    if (!timeStr) return '-';
    try {
        const date = new Date(timeStr);
        return date.toLocaleTimeString('zh-CN', {
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit'
        });
    } catch (error) {
        return timeStr;
    }
};

/**
 * 相对时间格式化（如：2小时前、3天前）
 * @param timeStr 时间字符串
 * @returns 相对时间字符串，如果为空返回 '-'
 */
export const formatRelativeTime = (timeStr: string | null | undefined): string => {
    if (!timeStr) return '-';
    try {
        const date = new Date(timeStr);
        const now = new Date();
        const diff = now.getTime() - date.getTime();
        
        const seconds = Math.floor(diff / 1000);
        const minutes = Math.floor(seconds / 60);
        const hours = Math.floor(minutes / 60);
        const days = Math.floor(hours / 24);
        const months = Math.floor(days / 30);
        const years = Math.floor(days / 365);
        
        if (years > 0) return `${years}年前`;
        if (months > 0) return `${months}个月前`;
        if (days > 0) return `${days}天前`;
        if (hours > 0) return `${hours}小时前`;
        if (minutes > 0) return `${minutes}分钟前`;
        if (seconds > 0) return `${seconds}秒前`;
        
        return '刚刚';
    } catch (error) {
        return timeStr;
    }
};

/**
 * 自定义时间格式化
 * @param timeStr 时间字符串
 * @param format 格式化模板，如 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的时间字符串，如果为空返回 '-'
 */
export const formatCustomTime = (timeStr: string | null | undefined, format: string = 'YYYY-MM-DD HH:mm:ss'): string => {
    if (!timeStr) return '-';
    try {
        const date = new Date(timeStr);
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        
        return format
            .replace('YYYY', String(year))
            .replace('MM', month)
            .replace('DD', day)
            .replace('HH', hours)
            .replace('mm', minutes)
            .replace('ss', seconds);
    } catch (error) {
        return timeStr;
    }
};
